package com.example.crm.entity;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableLogic;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;

import java.math.BigDecimal;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.List;

/**
 * 客户实体类
 */
@Data
@TableName("crm_customer")
public class Customer {

    @TableId(value = "id", type = IdType.AUTO)
    private Long id;

    /**
     * 客户名称
     */
    private String name;

    /**
     * 客户电话
     */
    private String phone;

    /**
     * 客户邮箱
     */
    private String email;

    /**
     * 客户地址
     */
    private String address;

    /**
     * 客户状态（0-潜在，1-正式，2-流失）
     */
    private Integer status;

    /**
     * 客户来源
     */
    private String source;

    /**
     * 客户等级（1-5星）
     */
    private Integer level;
    
    /**
     * 负责人ID
     */
    private Long managerId;

    /**
     * 客户分类ID
     */
    private Long categoryId;

    /**
     * 客户行业
     */
    private String industry;

    /**
     * 客户规模（0-小型，1-中型，2-大型）
     */
    private Integer scale;

    /**
     * 年营业额
     */
    private BigDecimal annualRevenue;

    /**
     * 客户网站
     */
    private String website;

    /**
     * 最后联系时间
     */
    private LocalDateTime lastContactTime;

    /**
     * 下次联系时间
     */
    private LocalDateTime nextContactTime;

    /**
     * 联系频率（天）
     */
    private Integer contactFrequency;

    /**
     * 生日
     */
    private LocalDate birthday;

    /**
     * 性别（0-未知，1-男，2-女）
     */
    private Integer gender;

    /**
     * 客户画像
     */
    private String profile;

    /**
     * 客户满意度（1-5）
     */
    private Integer satisfaction;

    /**
     * 创建时间
     */
    private LocalDateTime createTime;

    /**
     * 更新时间
     */
    private LocalDateTime updateTime;
    
    /**
     * 备注
     */
    private String remarks;

    /**
     * 逻辑删除标记（0-未删除，1-已删除）
     */
    @TableLogic
    private Integer deleted;

    /**
     * 分类名称（非数据库字段）
     */
    @TableField(exist = false)
    private String categoryName;

    /**
     * 负责人姓名（非数据库字段）
     */
    @TableField(exist = false)
    private String managerName;

    /**
     * 客户标签ID列表（非数据库字段）
     */
    @TableField(exist = false)
    private List<Long> tagIds;
    
    /**
     * 客户标签（非数据库字段）
     */
    @TableField(exist = false)
    private List<CustomerTag> tags;
} 